4.1 Dart Runtime 的 gn 构建

runtime/bin 下的 BUILD.gn,声明了 Dart Runtime 的库可执行文件。这些产物涵盖了Dart运行时的核心组件、开发工具、测试工具等各个方面,为Dart语言的执行和开发提供了完整的支持。Dart Runtime构建了以下主要产物:

  1. libdart_builtin - Dart 内置功能的静态库
  2. gen_snapshot - 用于生成 Dart 快照的可执行文件
  3. dart_io - dart:io库的实现
  4. dart_snapshot_cc - 包含 Dart VM 和 isolate 快照数据的源文件
  5. dart_kernel_platform_cc - 包含 kernel service 和平台 dill 文件的源文件
  6. dart - Dart VM 的主要可执行文件
  7. dart_precompiled_runtime - 预编译的 Dart 运行时可执行文件
  8. analyze_snapshot - 用于分析快照文件的工具(仅在特定配置下构建)
  9. run_vm_tests - 用于运行VM测试的可执行文件
  10. 一些测试相关的库:
  1. dart_libfuzzer - 用于模糊测试的特殊构建(仅在特定配置下构建)

此外还有一些辅助目标,如将二进制文件转换为可链接对象的模板等。


export_api_symbols

export_api_symbols 是在这个 BUILD.gn 文件中定义的一个配置(config)。它的主要目的是确保 Dart API 的符号在构建的库或可执行文件中被正确导出。这对于允许其他程序或库与 Dart 运行时进行交互非常重要。

这个配置根据不同的平台和编译器设置了不同的链接器标志(ldflags):

  1. 在 Windows 上,它导出 Dart_True 符号。
  2. 对于使用地址 sanitizer、内存 sanitizer 等的构建,它导出所有符号(-rdynamic)。
  3. 在 macOS 上,它导出所有以 _Dart_ 开头的符号。
  4. 对于非 Clang 编译器(如 GCC),它暂时使用 -rdynamic 导出所有符号。
  5. 对于其他情况(主要是 Linux 上的 Clang),它导出所有以 Dart_ 开头的符号。

这个配置的主要作用是确保 Dart API 的公共符号在最终的二进制文件中是可见的,这样其他程序就可以链接到 Dart 运行时并使用这些 API。

在构建过程中,这个配置被应用到多个目标上,例如 dart 可执行文件和 run_vm_tests。这确保了这些构建产物正确地导出了必要的 Dart API 符号。


Dart Library API

Dart 在 C/C++ 底层提供了一系列 API,通过上一节可以看出,他们均以 Dart_ 开头。

在代码中,此类 API 通常也会被 DART_EXPORT 宏所修饰。

比如,runtime/include/dart_api_dl.h,这是专门用于动态链接的 Dart API。


本文作者:Maeiee

本文链接:4.1 Dart Runtime 的 gn 构建

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!